home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCMania 44
/
PCMania CD44_1.iso
/
pcmania
/
treal44
/
aviles
/
3dbasics.bak
next >
Wrap
Text File
|
1996-04-05
|
22KB
|
801 lines
/**********************************************************
*
*Francisco Javier Avilés Navarro
* C/Pisa,4 Plgno.Res. Santa Ana
* CARTAGENA 30319 (MURCIA)
*
***********************************************************
*
* Marzo de 1996
*
***********************************************************
*
* Información acerca de las librerías 3Dbasics y 3DObjects
*
***********************************************************/
1.QUE SON 3DBASICS Y 3DOBJECTS.
2.FUNCIONES DE 3DBASICS.EJEMPLOS.
2.0 FUNCIONES.
2.1 EL PROGRAMA 'HOLA'.
2.2 UN PROGRAMA UN POCO MAS COMPLEJO: CILINDRO.C
2.3 EJEMPLO DE MOTOR ALTERNATIVO.
2.4 MAPEADO DE UNA TEXTURA PCX SOBRE UN POLIGONO
2.5 LECTORES DE FORMATOS GRAFICOS:
2.5.1. LECTOR PLG.
2.5.2. " ASC.
2.5.3. " INC.
2.5.4. " RAW.
2.5.5. " WRL.
2.6 CONVERSOR ENTRE FORMATOS.
2.7 TODO JUNTO. EL PROGRAMA SHAREWARE 'NAVEGANTE 1.0'
2.8 FORMATOS Y PRESTACIONES QUE SE QUIEREN INCORPORAR.
2.9 ADVERTENCIAS PARA EL USO DE LA LIBRERIA
3.FUNCIONES DE 3DOBJECTS.EJEMPLOS.
3.0 FUNCIONES.
3.1 UN PROGRAMA SENCILLO: SURFAB.CPP,SURFAB.CC .
3.2 LECTOR DE FORMATO DXF: LECTODXF.CC .
1.QUE SON 3DBASICS Y 3DOBJECTS.
-------------------------------
Son dos librerias en ,C y C++ respectivamente, utilizables en el desarrollo
de aplicaciones 3D y RV no inmersiva.
Entre las principales características de 3DBasics se encuentran:
- Renderización en cualquier modo de 8 bits (por el momento).
- Mapeado de texturas PCX (por el momento).
- Sombreados plano y Phong.
- Hasta 50000 tr/s en sombreado plano y 15000 en Phong
sobre un DX2 66 Mhz en DOS 32 bits.
- Luces lejanas,puntuales,... .
- Multiplataforma. Ha sido testeado sobre DOS 16 bits,
DOS 32 bits, Windows 3.11, y UNIX (plataformas IBM Risc 6000).
- Posibilidad de detección de choques entre objetos en tiempo real.
Entre las de 3DObjects:
- Creación de objetos en base a la siguiente jerarquía de clases:
punto3d --> conjunto_de_puntos --> conjunto_de_conjunto_de_puntos -> CAPA
| | |
Extr. Extrusión Extrusión
Revo.. Revolución.. ..
Extr.n.l. Extrusión no lineal
| |
| |
|_____________________________|
|
|
Superficies
bicúbicas
-Abiertas ---- (Bezier,Coons..)
-Semicerradas -(Tuberías,
-Cerradas ---- (Elipsoides,...)
2.FUNCIONES DE 3DBASICS.EJEMPLOS.
---------------------------------
2.0 FUNCIONES.
-----------------
Son las básicas en cualquier sistema 3D:
Para crear tetrángulos, que es el elemento básico de 3DBasics, se utiliza
forma_tetrangulo(double p1[3],double p2[3],double p3[3],double p4[3],int color,int s_color,char *textura,struct CUERPO *)
donde p1,p2,p3 y p4 definen obviamente los vértices, color el índice de la paleta utilizado,
s_color se utiliza para el caso de tetrángulos texturizados (entonces color es el ancho y s_color
el alto de la textura), textura es la matriz de caracteres que la definen y el puntero a
CUERPO es el cuerpo al que pertenece el tetrángulo (en 3DBasics los polígonos se organizan
por conjuntos para formar un cuerpo 3D.)
Análogamente existen 3 funciones más que son casos particulares del tetrágulo:
forma_triangulo,forma_recta y forma punto.
Para operaciones con CUERPOs existen funciones de:
-Rotacion.
-Traslado.
-Copia.
-Copia según espejo.
-Promediado
Existen además una serie de funciones que, todas juntas, forman un ciclo
de visualización:
-lookat (visx,visy,visz,mix,miy,miz,twist_angle). Establece
la matriz de transformación.
-a_observador() .Que traslada a coordenadas de observador el mundo virtual.
-a_pantalla_plano(). Proyecta sobre el buffer de pantalla y renderiza con modelo sombreado plano.
-a_pantalla_phong(). Proyecta sobre el buffer de pantalla y renderiza con modelo sombreado Phong.
-BitBlt(). Se trae del buffer de pantalla a la pantalla el gráfico.
-Manage(). Administra el sistema integrando el buffer con una función
de tratamiento del teclado y el ratón que permite moverse por el
mundo virtual.
Por fin existen 2 funciones:
- Initialize(int modo, long tam_buffer);
modo 0 320x200,1 640x400, 2 640x480, 3 800X600,4 1024x768, 5 1280x768
- cerrar_sistema();
que se deben poner al principio y final del programa para preparar al sistema
para utilizar a 3Dbasics . modo es la resolución a utilizar y tam_buffer el tamaño
del buffer de 3Dbasics. Un tamaño típico en DOS 32 bits o Windows 3.1 sería 1Mb con
lo que se vienen a poder crear sin técnicas especiales del orden de 5000 tetrangulos.
(10000 triangulos).
Para modelos más grandes (se ha llegado a experimentar con modelos de 400000 triángulos)
se recomienda el tener 16 Mb de RAM aunque en determinados casos, siempre que se cumplan
una serie de condiciones y se utilice una técnica especial se puede llegar al medio millón
con 8Mb ). Con menos memoria el sistema también puede renderizar esas cantidades pero la
velocidad cae drásticamente al tener que hacer el intercambio de datos con el disco duro
propio de sistemas protegidos.
Con este conjunto de funciones,que en total no sobrepasan las 20, se puede hacer prácticamente
todo lo imaginable.
2.1 El programa HOLA.
---------------------
Se va a describir un típico programa que simplemente crea un mundo con
un tetrángulo y permite moverse en él:
#include "3dbasics.h"
main()
{
double p1[3]={0.0,0.0,0.0},
p2[3]={100.0,0.0,0.0},
p3[3]={100.0,100.0,0.0},
p4[3]={0.0,100.0,0.0};
CUERPO HOLA;
/**PUNTO DE VISION*/
visx=visy=visz=1000;/*PUNTO DESDE DONDE SE MIRA*/
mix=miy=miz=0;/*PUNTO AL QUE SE MIRA*/
neary=300;/*DISTANCIA DEL OJO AL PLANO DE CLIP CERCANO.ES NECESARIO SIEMPRE*/
Initialize(2,1024);//Modo 640 x 480 y 1K para el administrador (realmente necesita menos).
forma_tetrangulo(p1,p2,p3,p4,93,0,NULL,&HOLA);
Manage();
cerrar_sistema();
}
2.2 UN PROGRAMA UN POCO MAS COMPLEJO: CILINDRO.C
------------------------------------------------
#include "3dbasics.h"
double p1[3],p2[3],p3[3],p4[3];
CUERPO HOLA;
void forma_cilindro(int n,double R,double H)
{
/*n es el numero de lados con que se desea aproximar al cilindro el prisma
que se va a formar, R es el radio y H la altura*/
double delta_v=(2*3.14159)/(double)n;
int icl1;
for (icl1=0;icl1<n;icl1++)
{
p1[0]=H;
p1[1]=R*cos((double)icl1*delta_v);
p1[2]=R*sin((double)icl1*delta_v);
p2[0]=H;
p2[1]=R*cos((double)(icl1+1)*delta_v);
p2[2]=R*sin((double)(icl1+1)*delta_v);
p3[0]=0.0;
p3[1]=R*cos((double)(icl1+1)*delta_v);
p3[2]=R*sin((double)(icl1+1)*delta_v);
p4[0]=0.0;
p4[1]=R*cos((double)icl1*delta_v);
p4[2]=R*sin((double)icl1*delta_v);
forma_tetrangulo(p1,p2,p3,p4,93,0,NULL,&HOLA);
}
return;
}
main()
{
visx=visy=visz=1000;
mix=miy=miz=0;
neary=300;
Initialize(2,100*1024);//Modo 640 x 480 y 100K para el administrador (realmente necesita menos).
forma_cilindro(40,100.0,1000.0);
Manage();
cerrar_sistema();
}
2.3 EJEMPLO DE MOTOR ALTERNATIVO
--------------------------------
#include "3dbasics.h"
#define R 50
struct triangulo *primero,*segundo,raiz,PISTON1,CIG1,BIELA1,PISTON2;
struct triangulo *TR3,*TR2,*TR1;
struct CUERPO PISTON11,PISTON12,CIG11,B1,EJE;
void haz_los_pistones()
{
int cl1;
double p1[3],p2[3],p3[3],p4[3];
int pp1[3],pp2[3];
float countador4;
cl1=0;
while (cl1<=19)
{
countador4=cl1*0.314159;
p1[0]=180+(R*sin(countador4));
p1[1]=280;
p1[2]=180-(R*cos(countador4));
p2[0]=180+(R*sin(countador4+0.314159));
p2[1]=280;
p2[2]=180-(R*cos(countador4+0.314159));
p3[0]=180+(R*sin(countador4+0.314159));
p3[1]=380;
p3[2]=180-(R*cos(countador4+0.314159));
p4[0]=180+R*sin(countador4);
p4[1]=380;
p4[2]=180-(R*cos(countador4));
forma_tetrangulo(p1,p2,p3,p4,93,0,"s",&PISTON11);
p1[0]=180+(R*sin(countador4));
p1[1]=280;
p1[2]=180-(R*cos(countador4));
p2[0]=180+(R*sin(countador4+0.314159));
p2[1]=280;
p2[2]=180-(R*cos(countador4+0.314159));;
p3[0]=180;
p3[1]=280;
p3[2]=180;
p4[0]=180;
p4[1]=280;
p4[2]=180;
forma_tetrangulo(p1,p2,p3,p4,93,0,"a",&PISTON11);
cl1++;
}
pp1[0]=10;pp1[1]=580;pp1[2]=180;
pp2[0]=400;pp2[1]=580;pp2[2]=180;
trans_copy(&PISTON11,&PISTON12,-80,0,0);
rota_tetrangs(&PISTON12,pp1,pp2,3.14159,1);
}
void haz_el_ciguenal()
{
int cl1;
double p1[3],p2[3],p3[3],p4[3],p5[3],p6[3],p7[3],p8[3];
double p9[3],p10[3],p11[3],p12[3],p13[3],p14[3],p15[3],p16[3];
float countador4;
p1[0]=200;
p1[1]=565;
p1[2]=165;
p2[0]=190;
p2[1]=565;
p2[2]=165;
p3[0]=190;
p3[1]=565;
p3[2]=195;
p4[0]=200;
p4[1]=565;
p4[2]=195;
forma_tetrangulo(p1,p2,p3,p4,93,0,"s",&CIG11);
p5[0]=200;
p5[1]=640;
p5[2]=130;
p6[0]=190;
p6[1]=640;
p6[2]=130;
forma_tetrangulo(p5,p6,p2,p1,93,0,"s",&CIG11);
p7[0]=200;
p7[1]=680;
p7[2]=130;
p8[0]=190;
p8[1]=680;
p8[2]=130;
forma_tetrangulo(p7,p8,p6,p5,93,0,"s",&CIG11);
p9[0]=200;
p9[1]=695;
p9[2]=165;
p10[0]=190;
p10[1]=695;
p10[2]=165;
forma_tetrangulo(p9,p10,p8,p7,93,0,"s",&CIG11);
p11[0]=200;
p11[1]=695;
p11[2]=195;
p12[0]=190;
p12[1]=695;
p12[2]=195;
forma_tetrangulo(p11,p12,p10,p9,93,0,"s",&CIG11);
p13[0]=200;
p13[1]=680;
p13[2]=230;
p14[0]=190;
p14[1]=680;
p14[2]=230;
forma_tetrangulo(p13,p14,p12,p11,93,0,"s",&CIG11);
p15[0]=200;
p15[1]=640;
p15[2]=230;
p16[0]=190;
p16[1]=640;
p16[2]=230;
forma_tetrangulo(p15,p16,p14,p13,93,0,"s",&CIG11);
forma_tetrangulo(p4,p3,p16,p15,93,0,"s",&CIG11);
forma_tetrangulo(p1,p5,p15,p4,93,0,"s",&CIG11);
forma_tetrangulo(p5,p7,p13,p15,93,0,"s",&CIG11);
forma_tetrangulo(p7,p9,p11,p13,93,0,"s",&CIG11);
forma_tetrangulo(p12,p14,p8,p10,93,0,"s",&CIG11);
forma_tetrangulo(p14,p16,p6,p8,93,0,"s",&CIG11);
forma_tetrangulo(p16,p3,p2,p6,93,0,"s",&CIG11);
trans_copy(&CIG11,&CIG11,-30,0,0);
trans_copy(&CIG11,&CIG11,-80,0,0);
while (cl1<=9)
{
countador4=cl1*0.628318;
p1[0]=200;
p1[1]=660+(12*sin(countador4));
p1[2]=180-(12*cos(countador4));
p2[0]=200;
p2[1]=660+(12*sin(countador4+0.628318));
p2[2]=180-(12*cos(countador4+0.628318));
p3[0]=240;
p3[1]=660+(12*sin(countador4+0.628318));
p3[2]=180-(12*cos(countador4+0.628318));
p4[0]=240;
p4[1]=660+12*sin(countador4);
p4[2]=180-(12*cos(countador4));
forma_tetrangulo(p1,p2,p3,p4,93,0,"s",&EJE);
cl1++;
}
cl1=0;
while (cl1<=9)
{
countador4=cl1*0.628318;
p1[0]=160;
p1[1]=660+(12*sin(countador4));
p1[2]=180-(12*cos(countador4));
p2[0]=160;
p2[1]=660+(12*sin(countador4+0.628318));
p2[2]=180-(12*cos(countador4+0.628318));
p3[0]=120;
p3[1]=660+(12*sin(countador4+0.628318));
p3[2]=180-(12*cos(countador4+0.628318));
p4[0]=120;
p4[1]=660+12*sin(countador4);
p4[2]=180-(12*cos(countador4));
forma_tetrangulo(p1,p2,p3,p4,93,0,"s",&EJE);
cl1++;
}
}
void haz_la_biela()
{
int cl1;
double p1[3],p2[3],p3[3],p4[3],p5[3],p6[3],p7[3],p8[3];
double p9[3],p10[3],p11[3],p12[3],p13[3],p14[3],p15[3],p16[3];
double p17[3],p18[3],p19[3],p20[3];
float countador4;
p1[0]=190;
p1[1]=340;
p1[2]=170;
p2[0]=170;
p2[1]=340;
p2[2]=170;
p3[0]=190;
p3[1]=560;
p3[2]=170;
p4[0]=170;
p4[1]=560;
p4[2]=170;
forma_tetrangulo(p1,p2,p3,p4,93,0,"s",&B1);
p5[0]=190;
p5[1]=570;
p5[2]=160;
p6[0]=170;
p6[1]=570;
p6[2]=160;
forma_tetrangulo(p5,p6,p4,p3,93,0,"s",&B1);
p7[0]=190;
p7[1]=590;
p7[2]=160;
p8[0]=170;
p8[1]=590;
p8[2]=160;
forma_tetrangulo(p7,p8,p6,p5,93,0,"s",&B1);
p9[0]=190;
p9[1]=605;
p9[2]=170;
p10[0]=170;
p10[1]=605;
p10[2]=170;
forma_tetrangulo(p9,p10,p8,p7,93,0,"s",&B1);
p11[0]=190;
p11[1]=605;
p11[2]=190;
p12[0]=170;
p12[1]=605;
p12[2]=190;
forma_tetrangulo(p11,p12,p10,p9,93,0,"s",&B1);
p13[0]=190;
p13[1]=590;
p13[2]=200;
p14[0]=170;
p14[1]=590;
p14[2]=200;
forma_tetrangulo(p13,p14,p12,p11,93,0,"s",&B1);
p15[0]=190;
p15[1]=570;
p15[2]=200;
p16[0]=170;
p16[1]=570;
p16[2]=200;
forma_tetrangulo(p15,p16,p14,p13,93,0,"s",&B1);
p17[0]=190;
p17[1]=560;
p17[2]=190;
p18[0]=170;
p18[1]=560;
p18[2]=190;
forma_tetrangulo(p17,p18,p16,p15,93,0,"s",&B1);
p19[0]=190;
p19[1]=340;
p19[2]=190;
p20[0]=170;
p20[1]=340;
p20[2]=190;
forma_tetrangulo(p19,p20,p18,p17,93,0,"s",&B1);
forma_tetrangulo(p1,p3,p17,p19,93,0,"s",&B1);
forma_tetrangulo(p3,p5,p15,p17,93,0,"s",&B1);
forma_tetrangulo(p5,p7,p13,p15,93,0,"s",&B1);
forma_tetrangulo(p7,p9,p11,p13,93,0,"s",&B1);
forma_tetrangulo(p12,p14,p8,p10,93,0,"s",&B1);
forma_tetrangulo(p14,p16,p6,p8,93,0,"s",&B1);
forma_tetrangulo(p16,p18,p4,p6,93,0,"s",&B1);
forma_tetrangulo(p4,p18,p20,p2,93,0,"s",&B1);
}
main()
{
int cl1=0,cl2,ii,cl3=1,evor=0;
int p1[3],p2[3],p5[3],p6[3];
float p3[3],p4[3];
float cfl1,cfl2,t=0.0,cfl3,cfl4;
float v_angular=0.2;
float l_biela=240.0;
float radio_cig=80.0;
float l1_l2;
float centro_giro_cig=660.0;
Initialize(2,0,0,300000);
haz_los_pistones();
haz_el_ciguenal();
haz_la_biela();
l1_l2=radio_cig/l_biela;
neary=300;/*NEAR CLIP PLANE:¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ESENCIAL!!!!!!!!!!!!!!!!*/
cfl1=centro_giro_cig-(radio_cig*cos(v_angular*t))-(l_biela*sqrt(1-(l1_l2*l1_l2*sin(v_angular*t)*sin(v_angular*t))));
cfl3=-atan2(l1_l2*sin(v_angular*t),sqrt(1-(l1_l2*l1_l2*sin(v_angular*t)*sin(v_angular*t))));
/**pUNTOS DE REFERENCIA PARA LOS GIROS */
p1[0]=10;p1[1]=660;p1[2]=180;
p2[0]=400;p2[1]=660;p2[2]=180;
p3[0]=10;p3[1]=340;p3[2]=180;
p4[0]=400;p4[1]=340;p4[2]=180;
p5[0]=(int)p3[0];
p5[1]=(int)p3[1];
p5[2]=(int)p3[2];
p6[0]=(int)p4[0];
p6[1]=(int)p4[1];
p6[2]=(int)p4[2];
/*LINEA DE VISION*/
visy=660;
visx=1301;
miy=660;
mix=180;
miz=400;
visz=400;
for( ; ; )
{
cl2=control_key(1000,1500);
if (cl2==27){break;}
else{
if (cl2==43){cl3=1;}
if (cl2==45){cl3=0;}
cl2=0;
if (cl3==1){
t+=1.0;
cfl2=centro_giro_cig-(radio_cig*cos(v_angular*t))-(l_biela*sqrt(1-(l1_l2*l1_l2*sin(v_angular*t)*sin(v_angular*t))));
cfl4=-atan2(l1_l2*sin(v_angular*t),sqrt(1-(l1_l2*l1_l2*sin(v_angular*t)*sin(v_angular*t))));
perspective(0,0,300,1400);
trans_tetrangs(&PISTON11,0,(cfl2-cfl1),0);
trans_tetrangs(&PISTON12,0,(cfl2-cfl1),0);
p3[1]+=(cfl2-cfl1);
p4[1]+=(cfl2-cfl1);
p5[1]=(int)p3[1];
p6[1]=(int)p4[1];
trans_tetrangs(&B1,0,(cfl2-cfl1),0);
rota_tetrangs(&B1,p5,p6,(cfl4-cfl3),1);
rota_tetrangs(&CIG11,p1,p2,v_angular,1);
}
lookat(visx,visy,visz,mix,miy,miz,0);
a_observador();
if (cl3==1){
promedia_normales(&B1);
}
memset(dir,100,DOBLETPANTX*DOBLETPANTY);
a_pantalla_phong();
GrBitBlt(NULL,0,70,Donde_dibujo,0,0,DOBLETPANTX,DOBLETPANTY,GrWRITE);
cfl1=cfl2;
cfl3=cfl4;
cl1++;
}
evor++;
};
cerrar_sistema();
}
2.4 MAPEADO DE UNA TEXTURA PCX SOBRE UN POLIGONO
------------------------------------------------
Aunque la inclusión de texturas tiene algunos detalles más, para
poder hacer compatible la paleta de la textura con la del sistema,
aquí va un pequeño ejemplo que mapea un fichero PCX 'f.pcx' sobre
un tetrangulo.
#include "3dbasics.h"
main()
{
double p1[3]={0.0,0.0,0.0},
p2[3]={100.0,0.0,0.0},
p3[3]={100.0,100.0,0.0},
p4[3]={0.0,100.0,0.0};
CUERPO HOLA;
int ancho,alto,localizador=getPCX("f.pcx",texturasPCX,-1,&ancho,&alto);
/**Toma de la textura*/
/**PUNTO DE VISION*/
visx=visy=visz=1000;/*PUNTO DESDE DONDE SE MIRA*/
mix=miy=miz=0;/*PUNTO AL QUE SE MIRA*/
neary=300;/*DISTANCIA DEL OJO AL PLANO DE CLIP CERCANO.ES NECESARIO SIEMPRE*/
Initialize(2,1024);//Modo 640 x 480 y 1K para el administrador (realmente necesita menos).
forma_tetrangulo(p1,p2,p3,p4,ancho,alto,texturasPCX,&HOLA);
Manage();
cerrar_sistema();
}
2.5,2.6 y 2.7 .PROGRAMAS CUYOS FUENTES VIENEN CON LA VERSION REGISTRADA.
------------------------------------------------------------------------
2.8 FORMATOS Y PRESTACIONES QUE SE QUIEREN INCORPORAR.
------------------------------------------------------
Además de los formatos que se pueden leer ya, estoy abierto a que se
me sugiera cualquier otro.
Por otra parte, he decidido adoptar el formato WRL (VRML) como el es-
tandar, pero como adolece de ciertas prestaciones lo voy a extender.
Quiero incluirle prestaciones como que en ANCHOR se le puedan incluir
no solo WRL's, sino cualquiera de los otros formatos. Además sería de-
seable incluir nuevas primitivas tales como bicubic_surface o algo
así.
En cuanto al motor en sí, en una nueva implementación que estoy empe-
zando a desarrollar estoy dirigiendo los esfuerzos a que sea dirigido
a CUERPOs en vez de a tetrangulos para poder implementar un mecanismo
LOD (Level Of Detail) por el cual el nivel de detalle de un cuerpo es-
té en función de la distancia a que nos encontremos de él (no tiene
sentido definir y manejar miles de triangulos si sólo va a aparecer
un punto en la pantalla). Esto me permitirá además el asociar sonidos
3D a esos cuerpos.
Por otra parte voy a implementar en el motor un mecanismo de visuali-
zación ZBuffer que espero no ralentize en más de un 50% la velocidad
del motor (incluso para grandes cantidades de triangulos, sombreado
Phong y texturas puede que sea más rápido). Además de la mejora que su
pone de por sí el hecho de que no se produzcan errores de profundidad,
creo que voy a poder implementar un mecanismo de sombreado entre obje-
tos en tiempo real (20000 triangulos/seg aprox.).
Una tercera mejora es la inclusión de color de 15 bits en DOS y de 24
bits en Windows de manera que las texturas puedan dejar de ser planas
respecto a la iluminación y puedan ser definidos un mayor número de co
lores en la paleta del sistema.
2.9 ADVERTENCIAS PARA EL USO DE LA LIBRERIA QUE SE ADJUNTA
----------------------------------------------------------
1. ES PARA SER UTILIZADA CON GNU C++.
2. SE INCLUYE UN FICHERO BUILD 'CONGT13.BAT' QUE DEBERA SER MODIFICADO
CON ARREGLO AL DIRECTORIO DONDE SE COMPILE. YO NORMALMENTE LO
HAGO EN C:\DJGPP\SAMPLES\HELLO Y POR ELLO TIENE ESTA TRAYECTO-
RIA.
del %1.
call ..\..\bin\setdjgpp ../.. ..\..
set TMPDIR=.
set GO32TMP=.
set GO32=
echo.
echo Compiling the test program
echo.
-----------
TRAYECTORIA ---> ..\..\bin\gcc -v -fomit-frame-pointer %1.c 3dbasics.o -o %1 -lgrx -lm -lc -lpc
-----------
echo.
echo Running the test program
echo.
-----------
TARJETA GRAFICA --|---LA MIA ES UNA CIRRUS LOGIC 5429!!!!!!!!!
----------- \/
set go32=driver c:\djgpp\drivers\cl5426.grn
..\..\bin\go32 %1
echo .
:exit
EL USO DE ESTE FICHERO OBVIAMENTE COMO SE PUEDE VER ES:
CONGT13 FICHERO_A_COMPILAR
Junto a este documento se distribuye el fichero '3dbasics.o' que puede
ser utilizado para generar programas y demos de forma libre. Las unicas
limitaciones que tiene son:
-El modelo de luz es cenital.
-La cantidad de triangulos que se pueden manejar.
Sin embargo se permite el sombreado Phong y texturas PCX.
La cantidad de memoria asignada al buffer interno es de 100000 bytes
lo que permite aproximadamente unos 1500 triangulos (depende de varios
factores el numero exacto).
Se necesita al menos una tarjeta VGA,386 con copro y al menos 2Mb de
memoria (si no recuerdo mal, aunque esto lo podeis mirar en el FAQ de DJGPP).
En la versión registrada se pueden tener todos los modelos de luz y:
VERSION DOS (Probado en Turbo C++ 2.0 o superior , Borland C, Power Pack
(Borland C 32 bits), Microsoft C++ y GNU C++).Ordenador minimo 8088 con VGA
para las versiones 16 bits.
Por 2995pts hasta 1Mb de espacio.
" 3995 " 2Mb "
" 4995 " 4Mb "
" 6500 " 8Mb "
" 9995 " 32Mb "
" 19995 sin limitacion
Los fuentes para ser modificados y distribuidos : CONSULTAR
VERSION WINDOWS 3.1x (Clase class Win3d : public TWindow de ObjectWindows 2.x)
Por 4995pts hasta 1Mb de espacio.
" 6500 " 2Mb "
" 7500 " 4Mb "
" 8500 " 8Mb "
" 12995 " 32Mb "
Los fuentes para ser modificados y distribuidos : CONSULTAR
Visualizadores DOS:
Hasta 1Mb Hasta 4Mb Sin limite
PLG+RAW+ASC+INC: 1500 pts 2000 pts 3000 pts
DXF : 1500 pts 2000 pts 5000 pts
VRML: 2000 pts 3000 pts 5000 pts
Conjunto 4000 pts 5500 pts 10000 pts
Visualizadores Windows 3.1x:
Hasta 1Mb Hasta 4Mb Hasta 16 Mb
PLG+RAW+ASC+INC: 2500 pts 3000 pts 4000 pts
VRML: 3000 pts 4000 pts 5000 pts
Conjunto 5000 pts 6000 pts 7000 pts
Todos aquellos que estén interesados en ser betatesters desarrollando ejemplos
(de los que después me den una copia) que me lo hagan saber en el cupón de
pedido pues el nivel de precio les baja un escalón (1Mb -> 1995, 2Mb -> 2995, ..)
Por otra parte los que querais usar 3dBasics para alguna demo o concurso y me
lo hagais saber se os bajarán dos niveles (2Mb -> 1995,4Mb ->2995,...) pero debeis
admitir que salga una pantalla de presentación en la que se haga mención del uso de
esta librería.
3.0,3.1 y 3.2 VERSION REGISTRADA.
---------------------------------